package com.lcgs.manage.service.impl;

import java.util.List;

import com.lcgs.common.core.domain.entity.SysUser;
import com.lcgs.common.utils.DateUtils;
import com.lcgs.common.utils.SecurityUtils;
import com.lcgs.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.lcgs.manage.mapper.MerchantMapper;
import com.lcgs.manage.domain.Merchant;
import com.lcgs.manage.service.IMerchantService;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;

/**
 * 合作商家管理Service业务层处理
 * 
 * @author lc
 * @date 2025-09-16
 */
@Service
public class MerchantServiceImpl implements IMerchantService 
{
    @Autowired
    private MerchantMapper merchantMapper;
    @Autowired
    private ISysUserService sysUserService;

    /**
     * 查询合作商家管理
     * 
     * @param merchantId 合作商家管理主键
     * @return 合作商家管理
     */
    @Override
    public Merchant selectMerchantByMerchantId(Long merchantId)
    {
        return merchantMapper.selectMerchantByMerchantId(merchantId);
    }

    /**
     * 查询合作商家管理列表
     * 
     * @param merchant 合作商家管理
     * @return 合作商家管理
     */
    @Override
    public List<Merchant> selectMerchantList(Merchant merchant)
    {
        return merchantMapper.selectMerchantList(merchant);
    }

    /**
     * 新增合作商家管理
     * 
     * @param merchant 合作商家管理
     * @return 结果
     */
    @Override
    @Transactional
    public int insertMerchant(Merchant merchant) {
        SysUser sysUser = new SysUser();
        // 使用时间戳确保唯一性，同时保持长度适中
        String userName = merchant.getPhone();
        sysUser.setUserName(userName);
        String password = "admin123";
        sysUser.setPassword(SecurityUtils.encryptPassword(password));
        sysUser.setNickName("lc");

        int userResult = sysUserService.insertUser(sysUser);

        if (userResult <= 0) {
            throw new RuntimeException("创建商家用户失败");
        }

        // 强制刷新事务
//        TransactionAspectSupport.currentTransactionStatus().flush();

        // 检查并获取用户ID
        Long userId = sysUser.getUserId();
        System.out.println("用户ID：" + userId);
        // 如果主键回写失败，需要通过其他方式获取ID
        if (userId == null) {
            // 通过用户名重新查询获取用户ID
            SysUser queryUser = sysUserService.selectUserByUserName(sysUser.getUserName());
            if (queryUser != null) {
                userId = queryUser.getUserId();
            }
        }

        // 如果还是获取不到ID，则抛出异常
        if (userId == null) {
            throw new RuntimeException("创建商家用户成功但无法获取用户ID");
        }

        merchant.setUserId(userId);
        merchant.setCreateTime(DateUtils.getNowDate());
        return merchantMapper.insertMerchant(merchant);
    }


    /**
     * 修改合作商家管理
     * 
     * @param merchant 合作商家管理
     * @return 结果
     */
    @Override
    public int updateMerchant(Merchant merchant)
    {
        merchant.setUpdateTime(DateUtils.getNowDate());
        return merchantMapper.updateMerchant(merchant);
    }

    /**
     * 批量删除合作商家管理
     * 
     * @param merchantIds 需要删除的合作商家管理主键
     * @return 结果
     */
    @Override
    public int deleteMerchantByMerchantIds(Long[] merchantIds)
    {
        return merchantMapper.deleteMerchantByMerchantIds(merchantIds);
    }

    /**
     * 删除合作商家管理信息
     * 
     * @param merchantId 合作商家管理主键
     * @return 结果
     */
    @Override
    public int deleteMerchantByMerchantId(Long merchantId)
    {
        return merchantMapper.deleteMerchantByMerchantId(merchantId);
    }

    /**
     * 根据用户ID查询合作商家信息
     * @param userId
     * @return
     */
    @Override
    public Merchant selectMerchantByUserId(Long userId) {
        Merchant merchant = merchantMapper.selectMerchantByUserId(userId);
        return merchant;

    }

    @Override
    public Long[] getinfo() {


        return null;
    }
}
